Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2019-AAAICAI-Covariate Shift Adaptation on Learning from Positive and Unlabeled Data

https://ojs.aaai.org/index.php/AAAI/article/view/4411

会議はAAAI Conference on AI。

Introduction

Covariance Shiftに対しては、Importance Weightingをサンプルに付与したうえでの、リスク最小化という手法が行われている。これは、密度比pte(x)/ptr(x)p_{te}(\mathbf{x}) / p_{tr}(\mathbf{x})である(本来は同時分布であるが、Covariance Shiftではこれと等しい)

この問題設定をPU Learningにも適用した。

Background

問題設定

  • データはxRd\mathbf{x} \in \mathbb{R}^d、Ground Truthのラベルはy{1,+1}y \in \{-1, +1\}である。
  • 識別器はg:RdRg : \mathbb{R}^d \to \mathbb{R}であり、符号が予測結果で絶対値がConfidenceであった。
  • 訓練目標は、Rte(g)=Epte(x,y)[l(yg(x))]R_{te}(g) = \mathbb{E}_{p_{te}(\mathbf{x}, y)} [l(y g(\mathbf{x}))]の最小化である。
  • Samplingの手法はおそらくCase-Control。
  • 存在するのはCovariance Shift。以下のようなものである。
ptr(yx)=pte(yx)ptr(x)pte(x)p_{tr}(y | \mathbf{x}) = p_{te}(y | \mathbf{x}) \\ p_{tr}(\mathbf{x}) \neq p_{te}(\mathbf{x})
  • 与えられるデータは、DtrP,DtrU,DteUD_{tr}^P, D_{tr}^U, D_{te}^Uである。訓練データのDomainではPUが与えられ、テストデータのDomainから得られたデータはすべてUである。

PU Learningについての部分は省略。この論文ではカーネル法を使った線形識別器を使っているので、使ってるPUのリスクの式は以下のようなものである。nnPUではなく、 📄Arrow icon of a page link2015-ICML-[uPU] Convex Formulation for Learning from Positive and Unlabeled Data である。

R(g)=πE+[l(g(x))l(g(x))]+EX[l(g(x))]R(g) = \pi \mathbb{E}_+ [l(g(\mathbf{x})) - l(-g(\mathbf{x}))] + \mathbb{E}_X [l(-g(\mathbf{x}))]

Importance WeightingによるCovariance Shiftの対処

Covariance Shiftに対処するために、密度比w(x)=pte(x)/ptr(x)w(\mathbf{x}) = p_{te}(\mathbf{x}) / p_{tr}(\mathbf{x})を用いて、以下のような式の最小化を行う。

Eptr(x,y)[l(yg(x))w(x)]\mathbb{E}_{p_{tr}(\mathbf{x}, y)} [l(y g(\mathbf{x})) w(\mathbf{x})]

データの重みによって、出現頻度を補正する重みをつけたうえでの最小化ということになる。

これの証明

期待値を積分の形で書き直せることを利用。pte(x)=ptr(x)w(x)p_{te}(\mathbf{x}) = p_{tr}(\mathbf{x}) w(\mathbf{x})であるので、明らかに以下のようになる。(Covariance Shift特有のptr(yx)=pte(yx)p_{tr}(y|\mathbf{x}) = p_{te}(y|\mathbf{x})が成り立つことで、同時分布の関係を周辺分布に転用できる)

Eptr(x,y)[l(yg(x))w(x)]=Epte(x,y)[l(yg(x))]\mathbb{E}_{p_{tr}(\mathbf{x}, y)} [l(y g(\mathbf{x})) w(\mathbf{x})] = \mathbb{E}_{p_{te}(\mathbf{x}, y)} [l(y g(\mathbf{x}))]

提案手法

R(g)=πE+[w(x){l(g(x))l(g(x))}]+EX[w(x)l(g(x))]R(g) = \pi \mathbb{E}_+ [w(\mathbf{x}) \{ l(g(\mathbf{x})) - l(-g(\mathbf{x})) \}] + \mathbb{E}_X [w(\mathbf{x})l(-g(\mathbf{x}))]

単純に、密度比を乗じることが数学上正しいので、このように使う。理由としては以下のような式変形。

Image in a image block

ここで、w(x)w(\mathbf{x})の推定はサンプルの周辺分布のみを使っており、ラベルの情報は不要である。

このw(x)w(\mathbf{x})は、📄Arrow icon of a page link2021-Survey-A Comprehensive Survey on Transfer Learning (Part1) Instance Weighting Strategy の2012, Sugiyamaの手法で行っている。

なお、上の式でのEX\mathbb{E}_Xでの期待値はTrainのDomainから計算しているが、現にTest DomainのUnlabeledDTUD_T^Uからサンプルしたデータはあるので、それについての計算をしてもよい

見る感じだとこっちのほうがよさそうで計算結果が安定するが、どうやら実験してみた形だとTrain Domainから密度比で変換したほうがいいらしい。

理由としては密度比は完ぺきに推定できていないのでバイアスが生じるが、同じw(x)w(\mathbf{x})を乗じていれば同じようなバイアスがかかっている。EX\mathbb{E}_XをTest Domainで計算すると片方の項はバイアスがかからなくなり、それで不整合で性能が落ちるのではないか?

Covariance Shiftの効果

Covariance Shiftについては、2種類考えることができる。

  • PositiveだけCovariance ShiftしてNegativeはそのまま。
  • NegativeだけCovariance ShiftしてPositiveはそのまま。
    • 結論を言うと、この状況だけはうれしいこと。

PositiveだけCovariance ShiftしてNegativeはそのまま

具体的には以下のようになる。

Image in a image block

この時、以下が成り立つと嬉しい。って、成り立たないからDomain Shiftがあるわけだろ!

πtrptr(xy=+1)=πtepte(xy=+1)ptr(x,y=+1)=pte(x,y=+1)\pi_{tr} p_{tr}(\mathbf{x}|y=+1) = \pi_{te} p_{te}(\mathbf{x}|y=+1) \\ p_{tr}(\mathbf{x}, y=+1) = p_{te}(\mathbf{x}, y=+1)

これが成り立たないからこそ、w(x)w(\mathbf{x})による補正が必要で、これがなければE+\mathbb{E}_+の項にバイアスがかかってしまう。

NegativeだけCovariance ShiftしてPositiveはそのまま

具体的には以下のようになる。

Image in a image block

この時、w(x)w(\mathbf{x})による補正は不要である

pte(x,y=+1)=πtepte(xy=+1)=πteptr(xy=+1)p_{te}(\mathbf{x}, y=+1)= \pi_{te} p_{te}(\mathbf{x}| y=+1) = \pi_{te} p_{tr}(\mathbf{x}| y=+1)

上式が成り立つので、E+\mathbb{E}_+の式の書き換えで以下のようにすればいい。

πteEtr+[l(g(x))l(g(x))]+EteX[l(g(x))]\pi_{te} \mathbb{E}_{tr+}[l(g(\mathbf{x})) - l(-g(\mathbf{x}))] + \mathbb{E}_{teX}[l(-g(\mathbf{x}))]

密度比推定しないので、こっちのほうがずっと学習としては安定する。

Class PriorがShiftする場合

ptr(xy)=pte(xy)ptr(y)pte(y)p_{tr}(\mathbf{x}|y) = p_{te}(\mathbf{x}|y) \\ p_{tr}(y) \neq p_{te}(y)

PU Learningでは、以下のようにUnlabeledが得られている。

pte(x)=πtepte(xy=+1)+pte(x,y=1)p_{te}(\mathbf{x}) = \pi _{te} p_{te}(\mathbf{x}|y=+1) + p_{te}(\mathbf{x}, y=-1)

これを使うと、Class PriorがShiftする場合は、以下のようにNegativeだけCovariance Shiftした時と同じ式で学習すればいい

両者の違いは、p(xy=1)p(\mathbf{x}|y=-1)はTrain, Testにおいて同じであるかどうかだけ。Class PriorがShiftする場合はこれは同じである。

πteEtr+[l(g(x))l(g(x))]+EteX[l(g(x))]\pi_{te} \mathbb{E}_{tr+}[l(g(\mathbf{x})) - l(-g(\mathbf{x}))] + \mathbb{E}_{teX}[l(-g(\mathbf{x}))]

実装

識別器はカーネル法のSVMを使っている。

推定する密度比は以下のように、密度比を直接推定する。

低密度の領域では密度比が非常に大きい値か小さい値をとりうるので、それを防いで安定に計算するべくハイパラα[0,1]\alpha \in [0,1]を導入した以下のもので推定する。

wα(x)=pte(x)(1α)ptr(x)+αpte(x)w_\alpha(\mathbf{x}) = \frac{p_{te}(\mathbf{x})}{(1 - \alpha) p_{tr}(\mathbf{x}) + \alpha p_{te}(\mathbf{x})}

α=0\alpha=0の時は普通の密度比である。

これを用いて、最小二乗法でフィッティングを行う。